package main

import (
	"fmt"
	"time"
)

func main() {
	// 多个通过接收数据，没有数据就阻塞了
	//for {
	//	// 尝试从ch1接收值
	//	data, ok := <-ch1
	//	// 尝试从ch2接收值
	//	data, ok := <-ch2
	//}

	// Go内置了select关键字，可以同时响应多个通道的操作。
	// select的使用类似于switch语句
	outPut1 := make(chan string)
	outPut2 := make(chan string)
	// 跑2个子协程，写数据
	go test1(outPut1)
	go test2(outPut2)
	// 用select监控
	select {
	case s1 := <-outPut1:
		fmt.Println("s1", s1)
	case s2 := <-outPut2:
		fmt.Println("s2", s2)
	}
}

func test1(ch chan string) {
	time.Sleep(5 * time.Second)
	ch <- "test1"
}

func test2(ch chan string) {
	time.Sleep(time.Second * 2)
	ch <- "test2"
}
